//
//  ByNet_Tests.m
//  ByNet_Tests
//
//  Created by pro on 16/7/21.
//  Copyright © 2016年 pro. All rights reserved.
//

#import <XCTest/XCTest.h>

#import <AFNetworking/AFNetworking.h>
#import "GlobalConfig.pch"  


@interface ByNet_Tests : XCTestCase

@end

@implementation ByNet_Tests

/** 测试断言
 XCTFail(format…) 生成一个失败的测试；
 XCTAssertNil(a1, format...)为空判断，a1为空时通过，反之不通过；
 XCTAssertNotNil(a1, format…)不为空判断，a1不为空时通过，反之不通过；
 XCTAssert(expression, format...)当expression求值为TRUE时通过；
 XCTAssertTrue(expression, format...)当expression求值为TRUE时通过；
 XCTAssertFalse(expression, format...)当expression求值为False时通过；
 XCTAssertEqualObjects(a1, a2, format...)判断相等，[a1 isEqual:a2]值为TRUE时通过，其中一个不为空时，不通过；
 XCTAssertNotEqualObjects(a1, a2, format...)判断不等，[a1 isEqual:a2]值为False时通过；
 XCTAssertEqual(a1, a2, format...)判断相等（当a1和a2是 C语言标量、结构体或联合体时使用, 判断的是变量的地址，如果地址相同则返回TRUE，否则返回NO）；
 XCTAssertNotEqual(a1, a2, format...)判断不等（当a1和a2是 C语言标量、结构体或联合体时使用）；
 XCTAssertEqualWithAccuracy(a1, a2, accuracy, format...)判断相等，（double或float类型）提供一个误差范围，当在误差范围（+/-accuracy）以内相等时通过测试；
 XCTAssertNotEqualWithAccuracy(a1, a2, accuracy, format...) 判断不等，（double或float类型）提供一个误差范围，当在误差范围以内不等时通过测试；
 XCTAssertThrows(expression, format...)异常测试，当expression发生异常时通过；反之不通过；（很变态） XCTAssertThrowsSpecific(expression, specificException, format...) 异常测试，当expression发生specificException异常时通过；反之发生其他异常或不发生异常均不通过；
 XCTAssertThrowsSpecificNamed(expression, specificException, exception_name, format...)异常测试，当expression发生具体异常、具体异常名称的异常时通过测试，反之不通过；
 XCTAssertNoThrow(expression, format…)异常测试，当expression没有发生异常时通过测试；
 XCTAssertNoThrowSpecific(expression, specificException, format...)异常测试，当expression没有发生具体异常、具体异常名称的异常时通过测试，反之不通过；
 XCTAssertNoThrowSpecificNamed(expression, specificException, exception_name, format...)异常测试，当expression没有发生具体异常、具体异常名称的异常时通过测试，反之不通过
 */

- (void)setUp {
    [super setUp];
    // Put setup code here. This method is called before the invocation of each test method in the class.
}

- (void)tearDown {
    // Put teardown code here. This method is called after the invocation of each test method in the class.
    [super tearDown];
}

- (void)testExample {
    
    __block BOOL complete = NO;
    
    static NSString *apiType = @"BY_User_login";
    static NSInteger apiVersion = 101;
    int rand = arc4random() % 1000;

    NSString *requestId = [NSString stringWithFormat:@"%ld%d", (NSInteger)[NSDate currentDateTimeInterval], rand];

    // 拼接参数
    NSMutableDictionary *params = [[NSMutableDictionary alloc] init];

    [ByNetBaseApi post:requestId
               apiType:apiType
              dataType:ByNetDataTypeDictionary
             apiVerson:apiVersion
                params:params
               success:^(NSURLSessionDataTask *operation, id responseObject) {
                   complete = YES;
                   NSLog(@"%@", responseObject);
                   
                   //           // 返回数据 为字典
                   //           NSAssert([responseObject isKindOfClass:[NSDictionary class]], @"首页 返回数据 必须是字典类型的，请检查");
                   //
                   //           //           DLog(@"******** 首页 -> 成功: %@", responseObject);
                   //           ByNetBaseResult *result = [[ByNetBaseResult alloc] init];
                   //           result.code = 0;
                   //           result.msg = @"首页获得成功";
                   //           ByNetHomeModel *model = [[ByNetHomeModel alloc] initContentWithDic:responseObject];
                   //           result.data = model;
                   //
                   //           if(success) {
                   //               success(result);
                   
               } failure:^(NSURLSessionDataTask *operation, NSError *error){
                   complete = YES;
                   NSLog(@"%@", error);
                   //           DLog(@"******** 首页数据查询 -> 失败: %@", error);
                   //
                   //           ByNetBaseResult *result = [[ByNetBaseResult alloc] init];
                   //           result.code = error.code;
                   //           result.msg = error.domain;
                   //           result.data = error.localizedDescription;
                   //           if(failure) {
                   //               failure(result);
                   //           } else {
                   //               [ByCoreToolAlert alertError:result.msg];
                   //           }
               }];
    
    while (!complete) {
        CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.01, YES);
        NSLog(@"requesting");
    }
}

- (void)testPerformanceExample {
    // This is an example of a performance test case.
    [self measureBlock:^{
        // Put the code you want to measure the time of here.
    }];
}

@end
